import axios from 'axios';
import { getToken } from '@/utils/auth';

// 设置默认的 Content-Type
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8';

// 创建 axios 实例
const service = axios.create({
  baseURL: '/api', // 公共请求 URL 前缀
  timeout: 10000, // 超时时间 10 秒
});

/**
 * 请求拦截器
 *
 * 每次发送请求之前，设置必要的请求头信息（如 Authorization），
 * 并对 GET 请求的参数进行序列化。
 */
service.interceptors.request.use(
    config => {
      // 设置 Authorization 头部，如果存在 Token
      const token = getToken();
      if (token) {
        config.headers['Authorization'] = `Bearer ${token}`;
      }

      // 对 GET 请求的参数进行序列化
      if (config.method === 'get' && config.params) {
        const queryString = Object.entries(config.params)
            .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
            .join('&');

        config.url = `${config.url}?${queryString}`;
        config.params = {}; // 清空 GET 请求的 params，避免重复参数
      }

      return config;
    },
    error => {
      console.error('Request error:', error);
      return Promise.reject(error);
    }
);

export default service;
